/*
** Xin YUAN, 2024, BSD (2)
*/

////////////////////////////////////////////////////////////////////////////////

//normalize

template <typename T>
inline Vec2<T> Vec_Normalize(const Vec2<T>& v) noexcept
{
	T n = v.Length();
	return Vec2<T>(v.coord.x / n, v.coord.y / n);
}
template <typename T>
inline Vec3<T> Vec_Normalize(const Vec3<T>& v) noexcept
{
	T n = v.Length();
	return Vec3<T>(v.coord.x / n, v.coord.y / n, v.coord.z / n);
}
template <typename T>
inline Vec4<T> Vec_Normalize(const Vec4<T>& v) noexcept
{
	T n = v.Length();
	return Vec4<T>(v.coord.x / n, v.coord.y / n, v.coord.z / n, v.coord.w / n);
}

template <typename T>
inline void Vec_Homogenize(Vec4<T>& v) noexcept
{
	v /= v.coord.w;
}

////////////////////////////////////////////////////////////////////////////////
